package practicedemo68;

import java.util.ArrayList;
import java.util.Arrays;

public class Test {
    public static void main(String[] args) {
        Animal d = new Dog();
        Animal c = new Cat();

        //编译看左边，运行看右边
        d.eat();
        //多态弊端
        //不能去调用子类的特有方法
        //报错原因：调用成员方法，先会检测父类中有没有这个方法，要是没有会直接报错
//        d.keepHome();


        //解决方案：把调用者变回子类类型
//        Dog dog = (Dog) d;
//        dog.keepHome();

//        if (d instanceof Dog){
//            Dog x = (Dog) d;
//        } else if (d instanceof Cat){
//            Cat x = (Cat) d;
//        } else {
//            System.out.println("没有这个类型");
//        }


//        //jdk14新特性
//        if (d instanceof Dog dog){
//            dog.keepHome();
//        } else if (d instanceof Cat cat){
//            cat.catchMouse();
//        } else {
//            System.out.println("没有这个类型");
//        }


    }
}

class Animal{
    public void eat(){
        System.out.println("动物在吃东西");
    }
}

class Dog extends Animal{
    @Override
    public void eat() {
        System.out.println("狗吃骨头");
    }

    public void keepHome(){
        System.out.println("狗看家");
    }
}


class Cat extends Animal{
    @Override
    public void eat() {
        System.out.println("猫吃小鱼干");
    }

    public void catchMouse(){
        System.out.println("猫抓老鼠");
    }
}